const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatTimeTwo = tempTime => {
  let date = new Date(tempTime)
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

const getTimeWithId = id => {
  // 这里为什么要乘以 1000 ？乘以1000之后表示“毫秒”。
  const time = parseInt(id.toString().substring(0, 8), 16) * 1000;
  // 这个是“秒”
  // const time = parseInt(id.toString().substring(0, 8), 16);

  return time;
}

/**
 * 获取从返回的数据中剥离出需要的数据。
 * @param result
 */
const getReqData = result => {
  if (!result) return false
  return result.status === 200 && result.data.status === 0 ? result.data.data : false
};

const getErrorMsg = result => {
  if (!result) return false
  return result.data.error.msg
}

/**
 * 检查姓名
 */
const checkName = name => {
  // 姓名不能是空格，姓名两端不能有空格
  const MESSAGE_REGEXP = /^\s*|\s*$/g
  const tempName = name.replace(MESSAGE_REGEXP, "")
  if ("" === tempName) return {
    flag: false,
    msg: "姓名不能为空，并且姓名两端不能有空格！"
  };

  return {
    flag: true,
    msg: ""
  };
}

/**
 * 检查手机号码
 */
const checkTelephone = telephone => {
  // 手机号必须是11位
  const TEL_REGEXP = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/
  const result = TEL_REGEXP.test(telephone)
  if (!result) return {
    flag: false,
    msg: "请输入正确的手机号！"
  };

  return {
    flag: true,
    msg: ""
  };
}

/**
 * 必须有内容
 */
const checkTextarea = textarea => {
  // 姓名不能是空格，姓名两端不能有空格
  const MESSAGE_REGEXP = /^\s*|\s*$/g
  // 必须有内容
  const textareaResult = textarea.replace(MESSAGE_REGEXP, "")
  if ("" === textareaResult) return {
    flag: false,
    msg: "请输入内容！"
  };

  return {
    flag: true,
    msg: ""
  };
}

/**
 * 获取图片的临时下载地址
 * @param {*} imgs
 */
const getImgsTempUrl = (imgs) => {
  let fileListFromImgs = []

  return new Promise((resolve, reject) => {
    wx.cloud.getTempFileURL({
      fileList: imgs,
      success: res => {
        const {
          fileList
        } = res

        if (fileList.length > 0) {
          fileListFromImgs = fileList.map((el, index) => {
            const {
              tempFileURL,
              fileID
            } = el

            return {
              uid: -index,
              name: fileID.split('/').pop(),
              status: 'done',
              url: tempFileURL,
            }
          })
          resolve(fileListFromImgs)
        } else reject(fileListFromImgs)
      },
      fail: err => {}
    })
  })
}

/**
 * 将带html标签的article中的图片云存储url，转换成为临时下载的url
 * @param {*} imgs
 */
const formatArticle = async (article) => {
  if (undefined === article || '' === article) return null;
  let newDetail = article
  // 匹配出图片的云地址，imgs是数组
  const imgs = article.match(/cloud[^<]+jpg/g)
  if (null === imgs || undefined === imgs) return article

  const imgsTempUrl = await getImgsTempUrl(imgs)

  // 将html标签中的图片下载用url，替换为临时下载用url。
  imgs.forEach((img, index) => {
    newDetail = newDetail.replace(img, imgsTempUrl[index].url)
  })

  return newDetail
}

/**
 * 登录微信获取userinfo，并且存储在app.globalData中
 */
const wxLoginCustom = () => {
  const app = getApp()

  wx.getSetting({
    success: res => {
      if (res.authSetting['scope.userInfo']) {
        // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
        wx.getUserInfo({
          success: res => {
            // 可以将 res 发送给后台解码出 unionId
            app.globalData.userInfo = res.userInfo
          }
        })
      }
    },
    fail: res => {
      console.log('请求失败', res)
    },
    complete: res => {
      console.log('最终结果', res)      
    }
  })

  return new Promise((resolve, reject) => {

    if (app.globalData.userInfo) {
      resolve(app.globalData.userInfo)
    } else if (wx.canIUse('button.open-type.getUserInfo')) {
      // 获取
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          resolve(res.userInfo)
        }
      })

      // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        resolve(res.userInfo)
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          resolve(res.userInfo)
        }
      })
    }

  })
}

module.exports = {
  formatTime,
  formatTimeTwo,
  getReqData,
  getErrorMsg,
  getTimeWithId,
  checkName,
  checkTelephone,
  checkTextarea,
  getImgsTempUrl,
  formatArticle,
  wxLoginCustom
}